window.onload = function() {
	init();
	resetAccount(getelid('account'));
}

// Η function `resetAccount' θέτει default τιμές σε όλα τα πεδία της
// φόρμας και καθαρίζει όλα τα fyi fields. Εφόσον πρόκειται για
// τροποποίηση στοιχείων, τα πεδία τίθενται στις τρέχουσες τιμές τους,
// αλλιώς καθαρίζονται τα πεδία.

function resetAccount(f) {
	var formFyi = getelid('accountFyi');
	formFyi.innerHTML = '';
	getelid('loginFyi').innerHTML = '';
	getelid('onomaFyi').innerHTML = '';
	getelid('emailFyi').innerHTML = '';
	getelid('kodikos2Fyi').innerHTML = '';

	// Εφόσον έχουμε φόρμα τροποποίησης, ζητάμε (σύγχρονα) τα στοιχεία
	// του λογαριασμού και θέτουμε τις τιμές των αντίστοιχων πεδίων.
	// Τα πεδία του λογαριασμού επιστρέφουν ως ένα newline separated
	// string της μορφής:
	//
	//	OK
	//	όνομα
	//	email	
	//	board

	if (pineza.login) {
		var req = newRequest('fetchAccount');
		req.open('post', pineza.server + 'account/fetchAccount.php', false);
		sendRequest(req, 'login=' + uri(pineza.login));
		var rsp = fixRepsonse(req);
		var xristis = rsp.split('\n');
		if (xristis[0] != 'OK') {
			formFyi.innerHTML = rsp;
			alert('Failed to get account data');
			self.location = pineza.server + 'index.php';
			return;
		}

		f.login.value = pineza.login;
		f.login.disabled = true;
		f.onoma.value = xristis[1];
		f.email.value = xristis[2];
		f.board.value = xristis[3];
		f.onoma.focus();
	}
	else {
		f.login.value = '';
		f.login.disabled = false;
		f.onoma.value = '';
		f.email.value = '';
		f.board.value = '';
		f.login.focus();
	}

	// Τα πεδία του κωδικού και του αντιγράφου επιβεβαίωσης τίθενται
	// σε κενές τιμές.

	f.palios.value = '';
	f.kodikos.value = '';
	f.kodikos2.value = '';
	return false;
}

// Η function `checkLogin' ελέγχει το πεδίο του login name. Ελέγχεται η ορθότητα
// του πεδίου: Το πεδίο πρέπει να περιέχει μόνο λατινικούς χαρακτήρες, αριθμητικά
// ψηφία, τελείες, underscores και παύλες και να ξεκινάει με λατινικό χαρακτήρα.

function checkLogin(fld) {
	fld.value = fld.value.trim();
	fld.style.color = pineza.colorOk;
	var fyi = getelid('loginFyi');
	fyi.innerHTML = '';
	if (!checkLoginChars(fld, fyi))
		return false;

	if (fld.value == '') {
		fyi.innerHTML = 'Login name cannot be empty';
		return false;
	}

	var req = newRequest('checkLogin');
	req.open('post', pineza.server + 'account/checkLogin.php', false);
	sendRequest(req, 'login=' + uri(fld.value));
	var rsp = fixResponse(req);
	if (rsp) {
		fld.style.color = pineza.colorError;
		fyi.innerHTML = rsp;
		return false;
	}

	return true;
}

function checkLoginChars(fld, fyi) {
	if (fld.value == '') return true;
	if (fld.value.match(/^[a-zA-Z][a-zA-Z0-9_.-]*$/)) return true;

	fld.style.color = pineza.colorError;
	fyi.innerHTML = 'Only latin characters, digits, ' +
		'underscores, dots and dashes are allowed';
	return false;
}

function checkPasswords(form, minima) {
	var kodikos = form.kodikos;
	var kodikos2 = form.kodikos2;
	kodikos.value = kodikos.value.trim();
	kodikos2.value = kodikos2.value.trim();
	kodikos.style.color = pineza.colorOk;
	kodikos2.style.color = pineza.colorOk;
	fyi = getelid('kodikos2Fyi');
	fyi.innerHTML = '';
	if (kodikos2.value === kodikos.value) return true;

	if (kodikos2.value) kodikos2.style.color = pineza.colorError;
	if ((minima != undefined) && (minima != null) && minima)
		fyi.innerHTML = 'Οι δύο κωδικοί είναι διαφορετικοί';

	return false;
}

function checkEmail(fld, fyi) {
	fld.value = fld.value.trim();
	fld.style.color = pineza.colorOk;
	fyi.innerHTML = '';
	if (fld.value == '') return true;

	if (validEmail(fld.value)) return true;

	fld.style.color = pineza.colorError;
	fyi.innerHTML = 'Invalid e-mail';
	return false;
}

function signup(form) {
	var formFyi = getelid('accountFyi');
	formFyi.innerHTML = 'Checking account data…';

	var fld = null;
	var ok = true;
	if ((!pineza.login) && (!checkLogin(form.login, false))) {
		fld = form.login;
		ok = false;
	}

	form.onoma.value = form.onoma.value.trim();
	if (form.onoma.value === '') {
		getelid('onomaFyi').innerHTML = 'You must provide full name!';
		if (fld === null) fld = form.onoma;
		ok = false;
	}

	if (!checkEmail(form.email, getelid('emailFyi'))) {
		if (fld === null) fld = form.email;
		ok = false;
	}

	if (!checkPasswords(form, true)) {
		if (fld === null) fld = form.kodikos;
		ok = false;
	}

	if (!ok) {
		formFyi.innerHTML = 'Please fix account data and try again.';
		if (fld != null) fld.focus();
		return false;
	}

	if (pineza.login) {
		var req = newRequest('updateAccount');
		req.open('post', pineza.server + 'account/updateAccount.php', false);
		var params = 'login=' + uri(form.login.value) + '&onoma=' + uri(form.onoma.value) +
			'&email=' + uri(form.email.value) + '&board=' + uri(form.board.value) +
			'&kodikos=' + uri(form.palios.value) + '&neosKodikos=' + uri(form.kodikos.value);
		sendRequest(req, params);
		var rsp = fixResponse(req);
		switch (rsp) {
		case 'SAME':
			formFyi.innerHTML = 'Nothing changed!';
			break;
		case '':
			resetAccount(form);
			formFyi.innerHTML = 'Account data updated successfully!';
			break;
		default:
			formFyi.innerHTML = (rsp ? rsp : 'Account data update failed!');
			break;
		}

		return false;
	}

	var req = newRequest('addAccount');
	req.open('post', pineza.server + 'account/addAccount.php', false);
	var params = 'login=' + uri(form.login.value) + '&onoma=' + uri(form.onoma.value) +
		'&email=' + uri(form.email.value) + '&kodikos=' + uri(form.kodikos.value) +
		'&when=' + currentTimestamp(true);
	sendRequest(req, params);
	var rsp = fixResponse(req);
	if (rsp) {
		formFyi.innerHTML = (rsp ? rsp : 'Account creation failed');
		return false;
	}

	formFyi.innerHTML = 'Your account created successfully!';
	self.location = pineza.server + 'index.php';
}

function cancelSignup(form) {
	self.location = pineza.server + 'index.php';
}
